// token.h
// 
#ifndef PUSS_CPP_TOKEN_H
#define PUSS_CPP_TOKEN_H

#include <glib.h>

enum TokenType { TK_EOF = 256
	, TK_BAD_WORD
	, TK_LINE_COMMENT
	, TK_BLOCK_COMMENT
	, TK_MACRO
	, TK_NUMBER
	, TK_CHAR
	, TK_ID
	, TK_STRING
	, KW__BOOL
	, KW__COMPLEX
	, KW__IMAGINARY
	, KW_ASM
	, KW_AUTO
	, KW_BOOL
	, KW_BREAK
	, KW_CASE
	, KW_CATCH
	, KW_CHAR
	, KW_CLASS
	, KW_CONST
	, KW_CONST_CAST
	, KW_CONTINUE
	, KW_DEFAULT
	, KW_DELETE
	, KW_DO
	, KW_DOUBLE
	, KW_DYNAMIC_CAST
	, KW_ELSE
	, KW_ENUM
	, KW_EXPLICIT
	, KW_EXPORT
	, KW_EXTERN
	, KW_FALSE
	, KW_FLOAT
	, KW_FOR
	, KW_FRIEND
	, KW_GOTO
	, KW_IF
	, KW_INLINE
	, KW_INT
	, KW_LONG
	, KW_MUTABLE
	, KW_NAMESPACE
	, KW_NEW
	, KW_OPERATOR
	, KW_PRIVATE
	, KW_PROTECTED
	, KW_PUBLIC
	, KW_REGISTER
	, KW_REINTERPRET_CAST
	, KW_RESTRICT
	, KW_RETURN
	, KW_SHORT
	, KW_SIGNED
	, KW_SIZEOF
	, KW_STATIC
	, KW_STATIC_CAST
	, KW_STRUCT
	, KW_SWITCH
	, KW_TEMPLATE
	, KW_THIS
	, KW_THROW
	, KW_TRUE
	, KW_TRY
	, KW_TYPEDEF
	, KW_TYPEID
	, KW_TYPENAME 
	, KW_UNION
	, KW_UNSIGNED
	, KW_USING
	, KW_VIRTUAL
	, KW_VOID
	, KW_VOLATILE
	, KW_WCHAR_T
	, KW_WHILE
	, SG_DBL_SHARP
	, SG_DBL_COLON
	, SG_DOT_STAR
	, SG_PTR_STAR
	, SG_PTR_TO
	, SG_HASH_HASH
	, SG_ELLIPSIS
	, SG_INC
	, SG_DEC
	, SG_NE
	, SG_EQ
	, SG_GE
	, SG_LE
	, SG_ADD_ASSIGN
	, SG_SUB_ASSIGN
	, SG_MUL_ASSIGN
	, SG_DIV_ASSIGN
	, SG_MOD_ASSIGN
	, SG_BIT_AND_ASSIGN
	, SG_BIT_OR_ASSIGN
	, SG_AND
	, SG_OR
	, SG_AND_ASSIGN
	, SG_OR_ASSIGN
	, SG_XOR_ASSIGN
	, SG_LSTREAM
	, SG_RSTREAM
	, SG_LSTREAM_ASSIGN
	, SG_RSTREAM_ASSIGN
};

typedef struct {
	gchar*	buf;
	gsize	len;
	gint	type;
	gint	line;
} MLToken;

#endif//PUSS_CPP_TOKEN_H

